home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Suzy B Software 2
/
Suzy B Software CD-ROM 2 (1994).iso
/
extras
/
programm
/
gemfsc20
/
gemfsc20.lzh
/
GEMFUNCS
/
GRFUDSLI.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-20
|
2KB
|
79 lines
/**************************************************************************
* GRFUDSLI.C - A graf_slidebox, with callback to user update function.
*************************************************************************/
#include "gemfintl.h"
/*-------------------------------------------------------------------------
*
*-----------------------------------------------------------------------*/
short grf_udslidebox(ptree, obj, vertical, ufunc, udata)
OBJECT *ptree;
short obj;
short vertical;
GUDSLIDE_FUNC *ufunc;
void *udata;
{
short slidepos;
short dmy;
short mx;
short my;
short mb;
short mcoord;
short lcoord = -1;
short min_coord;
short first_time;
short max_coord;
GRECT sliderect;
GRECT boundrect;
obj_offxywh(ptree, obj, &sliderect);
obj_offxywh(ptree, obj_parent(ptree, obj), &boundrect);
if (vertical) {
min_coord = boundrect.g_y + (sliderect.g_h / 2);
max_coord = min_coord + boundrect.g_h - sliderect.g_h;
} else {
min_coord = boundrect.g_x + (sliderect.g_w / 2);
max_coord = min_coord + boundrect.g_w - sliderect.g_w;
}
if (max_coord == min_coord) {
return 0; /* naughty caller! */
}
first_time = 1000;
do {
graf_mkstate(&mx, &my, &mb, &dmy);
mcoord = (vertical) ? my : mx;
if (mcoord < min_coord) {
mcoord = min_coord;
} else if (mcoord > max_coord) {
mcoord = max_coord;
}
slidepos = (short)(((mcoord - min_coord) * 1000L) / (max_coord - min_coord));
if (slidepos < 1) {
slidepos = 1;
}
if (lcoord != mcoord) {
lcoord = mcoord;
if (vertical) {
ptree[obj].ob_y = mcoord - min_coord;
} else {
ptree[obj].ob_x = mcoord - min_coord;
}
(*ufunc)(ptree, obj, slidepos+first_time, udata);
first_time = 0;
}
} while (mb);
(*ufunc)(ptree, obj, slidepos+2000, udata);
return slidepos;
}